{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "premium-shield",
   "metadata": {},
   "source": [
    "# Numerical Solvers"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "destroyed-smooth",
   "metadata": {},
   "source": [
    "Brain modeling toolkit provided in BrainPy is focused on **differential equations**. How to solve differential equations is the essence of the neurodynamics simulation. The exact algebraic solutions are only available for low-order differential equations. For the coupled high-dimensional non-linear brain dynamical systems, we need to resort to using numerical methods for solving such differential equations. In this section, I will illustrate how to define ordinary differential quations (ODEs), stochastic differential equations (SDEs), and how to define the numerical integration methods in BrainPy for these difined DEs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "specialized-wyoming",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:28.570200Z",
     "start_time": "2021-03-24T11:08:26.556045Z"
    }
   },
   "outputs": [],
   "source": [
    "import brainpy as bp\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "from mpl_toolkits.mplot3d import Axes3D"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "opposite-mixer",
   "metadata": {},
   "source": [
    "## ODEs"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "complicated-italy",
   "metadata": {},
   "source": [
    "### How to define ODE functions?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "removed-championship",
   "metadata": {},
   "source": [
    "BrainPy provides a convenient and intuitive way to define ODE systems. For the ODE\n",
    "\n",
    "$$\n",
    "{dx \\over dt} = f_1(x, t, y, p_1)\\\\\n",
    "{dy \\over dt} = f_2(y, t, x, p_2)\n",
    "$$\n",
    "\n",
    "we can define this system as a Python function: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "failing-headset",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:28.586248Z",
     "start_time": "2021-03-24T11:08:28.573214Z"
    }
   },
   "outputs": [],
   "source": [
    "def diff(x, y, t, p1, p2):\n",
    "    dx = f1(x, t, y, p1)\n",
    "    dy = g1(y, t, x, p2)\n",
    "    return dx, dy"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "devoted-television",
   "metadata": {},
   "source": [
    "where `t` denotes the current time, `p1` and `p2` which after the `t` are represented as parameters needed in this system, and `x` and `y` passed before `t` denotes the dynamical variables. In the function body, the derivative for each variable can be customized by the user need `f1` and `f2`. Finally, we return the corresponding derivatives `dx` and `dy` with the order the same as the variables in the function arguments.\n",
    "\n",
    "For each variable `x` or `y`, it can be a scalar (`var_type = bp.SCALAR_VAR`), a vector/matrix (`var_type = bp.POPU_VAR`), or a system (`var_type = bp.SYSTEM_VAR`). Here, the \"system\" means that the argument `x` denotes an array of vairables. Take the above example as the demonstration again, we can redefine it as:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "historical-chapel",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:28.602248Z",
     "start_time": "2021-03-24T11:08:28.591212Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "def diff(xy, t, p1, p2):\n",
    "    x, y = xy\n",
    "    dx = f1(x, t, y, p1)\n",
    "    dy = g1(y, t, x, p2)\n",
    "    return np.array([dx, dy])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "considered-surgery",
   "metadata": {},
   "source": [
    "### How to define the numerical integration for ODEs?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "mysterious-holiday",
   "metadata": {},
   "source": [
    "After the definition of ODE functions, the numerical integration of these functions are very easy in BrainPy. We just need put a decorator (`bp.odeint`). "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "apparent-structure",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:28.617260Z",
     "start_time": "2021-03-24T11:08:28.605262Z"
    }
   },
   "outputs": [],
   "source": [
    "@bp.odeint\n",
    "def diff(x, y, t, p1, p2):\n",
    "    dx = f1(x, t, y, p1)\n",
    "    dy = g1(y, t, x, p2)\n",
    "    return dx, dy"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "meaning-print",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-23T15:04:17.122194Z",
     "start_time": "2021-03-23T15:04:15.983197Z"
    }
   },
   "source": [
    "`bp.odeint` receives \"method\", \"dt\" etc. specification. By providing \"method\", user can specify the numerical methods to integrate the ODE functions. The supported ODE method can be found by"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "artificial-curtis",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:28.633269Z",
     "start_time": "2021-03-24T11:08:28.621269Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['bs',\n",
       " 'ck',\n",
       " 'euler',\n",
       " 'heun2',\n",
       " 'heun3',\n",
       " 'heun_euler',\n",
       " 'midpoint',\n",
       " 'ralston2',\n",
       " 'ralston3',\n",
       " 'ralston4',\n",
       " 'rk2',\n",
       " 'rk3',\n",
       " 'rk4',\n",
       " 'rk4_38rule',\n",
       " 'rkdp',\n",
       " 'rkf12',\n",
       " 'rkf45',\n",
       " 'ssprk3']"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bp.integrators.SUPPORTED_ODE_METHODS"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "surface-brush",
   "metadata": {},
   "source": [
    "Moreover, \"dt\" is a float which denotes the numerical integration precision. Here, for the above ODE function, we can define a four-order Runge-Kutta method for it:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "bronze-sport",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:28.649299Z",
     "start_time": "2021-03-24T11:08:28.636270Z"
    }
   },
   "outputs": [],
   "source": [
    "@bp.odeint(method='rk4', dt=0.01)\n",
    "def diff(x, y, t, p1, p2):\n",
    "    dx = f1(x, t, y, p1)\n",
    "    dy = g1(y, t, x, p2)\n",
    "    return dx, dy"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "chubby-timing",
   "metadata": {},
   "source": [
    "### Example 1: FitzHugh–Nagumo model"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "christian-receipt",
   "metadata": {},
   "source": [
    "Now, let's take the well known [FitzHugh–Nagumo model](https://en.wikipedia.org/wiki/FitzHugh%E2%80%93Nagumo_model) as an exmaple to illustrate how to define ODE solvers for brain modeling. The FitzHugh–Nagumo model (FHN) model has two dynamical variables, which are governed by the following equations:\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\tau {\\dot  {w}}&=v+a-bw\\\\\n",
    "{\\dot {v}} &=v-{\\frac {v^{3}}{3}}-w+I_{\\rm {ext}} \\\\\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "For this FHN model, we can code it in BrainPy like this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "saved-participation",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:28.665257Z",
     "start_time": "2021-03-24T11:08:28.653261Z"
    }
   },
   "outputs": [],
   "source": [
    "@bp.odeint(dt=0.01)\n",
    "def integral(V, w, t, Iext, a, b, tau):\n",
    "    dw = (V + a - b * w) / tau\n",
    "    dV = V - V * V * V / 3 - w + Iext\n",
    "    return dV, dw"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "freelance-carpet",
   "metadata": {},
   "source": [
    "After defining the numerical solver, the solution of the ODE system in the given times can be easily solved. For example, for the given parameters,"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "annual-wrestling",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:28.681259Z",
     "start_time": "2021-03-24T11:08:28.670264Z"
    }
   },
   "outputs": [],
   "source": [
    "a=0.7;   b=0.8;   tau=12.5;   Iext=1."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "competitive-transition",
   "metadata": {},
   "source": [
    "the solution of the FHN model between 0 and 100 ms can be approximated by "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "dated-sunset",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:28.952277Z",
     "start_time": "2021-03-24T11:08:28.686261Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x2124b062f88>]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "hist_times = np.arange(0, 100, integral.dt)\n",
    "hist_V = []\n",
    "V, w = 0., 0.\n",
    "for t in hist_times:\n",
    "    V, w = integral(V, w, t, Iext, a, b, tau)\n",
    "    hist_V.append(V)\n",
    "\n",
    "plt.plot(hist_times, hist_V)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "acute-prototype",
   "metadata": {},
   "source": [
    "### Example 2: Hodgkin–Huxley model"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "whole-mother",
   "metadata": {},
   "source": [
    "Another more complex example is the classical [Hodgkin–Huxley neuron model](https://en.wikipedia.org/wiki/Hodgkin%E2%80%93Huxley_model). In HH model, four dynamical variables (`V, m, n, h`) are used for modeling the initiation and propagration of the action potential. Specificaly, they are governed by the following equations:\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "C_{m} \\frac{d V}{d t} &=-\\bar{g}_{\\mathrm{K}} n^{4}\\left(V-V_{K}\\right)- \\bar{g}_{\\mathrm{Na}} m^{3} h\\left(V-V_{N a}\\right)-\\bar{g}_{l}\\left(V-V_{l}\\right)+I_{s y n} \\\\\n",
    "\\frac{d m}{d t} &=\\alpha_{m}(V)(1-m)-\\beta_{m}(V) m \\\\\n",
    "\\frac{d h}{d t} &=\\alpha_{h}(V)(1-h)-\\beta_{h}(V) h \\\\\n",
    "\\frac{d n}{d t} &=\\alpha_{n}(V)(1-n)-\\beta_{n}(V) n\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "In BrainPy, such dynamical system can be coded as:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "sexual-butler",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:28.968259Z",
     "start_time": "2021-03-24T11:08:28.955260Z"
    }
   },
   "outputs": [],
   "source": [
    "@bp.odeint(method='rk4', dt=0.01)\n",
    "def integral(V, m, h, n, t, Iext, gNa, ENa, gK, EK, gL, EL, C):\n",
    "    alpha = 0.1 * (V + 40) / (1 - np.exp(-(V + 40) / 10))\n",
    "    beta = 4.0 * np.exp(-(V + 65) / 18)\n",
    "    dmdt = alpha * (1 - m) - beta * m\n",
    "\n",
    "    alpha = 0.07 * np.exp(-(V + 65) / 20.)\n",
    "    beta = 1 / (1 + np.exp(-(V + 35) / 10))\n",
    "    dhdt = alpha * (1 - h) - beta * h\n",
    "\n",
    "    alpha = 0.01 * (V + 55) / (1 - np.exp(-(V + 55) / 10))\n",
    "    beta = 0.125 * np.exp(-(V + 65) / 80)\n",
    "    dndt = alpha * (1 - n) - beta * n\n",
    "\n",
    "    I_Na = (gNa * m ** 3.0 * h) * (V - ENa)\n",
    "    I_K = (gK * n ** 4.0) * (V - EK)\n",
    "    I_leak = gL * (V - EL)\n",
    "    dVdt = (- I_Na - I_K - I_leak + Iext) / C\n",
    "\n",
    "    return dVdt, dmdt, dhdt, dndt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "subjective-formation",
   "metadata": {},
   "source": [
    "Same as the FHN model, we can also integrate the HH model in the given parameters and time interval:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "worthy-restriction",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:28.984261Z",
     "start_time": "2021-03-24T11:08:28.971267Z"
    }
   },
   "outputs": [],
   "source": [
    "Iext=10.;   ENa=50.;   EK=-77.;   EL=-54.387\n",
    "C=1.0;      gNa=120.;  gK=36.;    gL=0.03"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "regular-kernel",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:30.645360Z",
     "start_time": "2021-03-24T11:08:28.987259Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x2124b29b9c8>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "hist_times = np.arange(0, 100, integral.dt)\n",
    "hist_V, hist_m, hist_h, hist_n = [], [], [], []\n",
    "V, m, h, n = 0., 0., 0., 0.\n",
    "for t in hist_times:\n",
    "    V, m, h, n = integral(V, m, h, n, t, Iext, \n",
    "                  gNa, ENa, gK, EK, gL, EL, C)\n",
    "    hist_V.append(V)\n",
    "    hist_m.append(m)\n",
    "    hist_h.append(h)\n",
    "    hist_n.append(n)\n",
    "\n",
    "\n",
    "plt.subplot(211)\n",
    "plt.plot(hist_times, hist_V, label='V')\n",
    "plt.legend()\n",
    "plt.subplot(212)\n",
    "plt.plot(hist_times, hist_m, label='m')\n",
    "plt.plot(hist_times, hist_h, label='h')\n",
    "plt.plot(hist_times, hist_n, label='n')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "corrected-cream",
   "metadata": {},
   "source": [
    "## SDEs"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "incoming-result",
   "metadata": {},
   "source": [
    "### How to define SDE functions?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "parental-rogers",
   "metadata": {},
   "source": [
    "For a one-dimensional stochastic differentiable equation (SDE) with scalar Wiener noise, it is given by\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "d X_{t}&=f\\left(X_{t}, t, p_1\\right) d t+g\\left(X_{t}, t, p_2\\right) d W_{t} \\quad (1)\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "where $X_t = X(t)$ is the realization of a stochastic process or random variable, $f(X_t, t)$ is the drift coefficient, $g(X_t, t)$ denotes the diffusion coefficient, the stochastic process $W_t$ is called Wiener process. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "marine-pencil",
   "metadata": {},
   "source": [
    "For this SDE system, we can define two Python funtions $f$ and $g$ to represent it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "skilled-continuity",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:30.661294Z",
     "start_time": "2021-03-24T11:08:30.648269Z"
    }
   },
   "outputs": [],
   "source": [
    "def g_part(x, t, p1, p2):\n",
    "    dg = g(x, t, p2)\n",
    "    return dg\n",
    "\n",
    "def f_part(x, t, p1, p2):\n",
    "    df = f(x, t, p1)\n",
    "    return df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "worth-vertex",
   "metadata": {},
   "source": [
    "Same with the ODE functions, the arguments before $t$ denotes the random variables, while the arguments defined after $t$ represents the parameters.  For the SDE function with scalar noise, the size of the return data $dg$ and $df$ should be the same. For example, $df \\in R^d, dg \\in R^d$."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "collect-connecticut",
   "metadata": {},
   "source": [
    "However, for a more general SDE system, it usually has multi-dimensional driving Wiener process:\n",
    "\n",
    "$$\n",
    "dX_t=f(X_t)dt+\\sum_{\\alpha=1}^{m}g_{\\alpha }(X_t)dW_t ^{\\alpha}\n",
    "$$\n",
    "\n",
    "For such $m$-dimensional noise system, the coding schema is the same with the scalar ones, but with the difference of that the data size of $dg$ has one more dimension. For example, $df \\in R^{d}, dg \\in R^{d \\times m}$."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "human-virgin",
   "metadata": {},
   "source": [
    "### How to define the numerical integration for SDEs?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "numeric-success",
   "metadata": {},
   "source": [
    "Brefore the numerical integration of SDE functions, we should distinguish two kinds of SDE integrals. For the integration of system (1), we can get\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "X_{t}&=X_{t_{0}}+\\int_{t_{0}}^{t} f\\left(X_{s}, s\\right) d s+\\int_{t_{0}}^{t} g\\left(X_{s}, s\\right) d W_{s} \\quad (2)\n",
    "\\end{align}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "neutral-telescope",
   "metadata": {},
   "source": [
    "In 1940s, the Japanese mathematician K. Ito denoted a type of integral called *Ito stochastic integral*. In 1960s, the Russian physicist R. L. Stratonovich proposed an other kind of stochastic integral called *Stratonovich stochastic integral* and used the symbol \"$\\circ$\" to distinct it from the former Ito integral.\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "d X_{t} &=f\\left(X_{t}, t\\right) d t+g\\left(X_{t}, t\\right) \\circ d W_{t} \\\\\n",
    "X_{t} &=X_{t_{0}}+\\int_{t_{0}}^{t} f\\left(X_{s}, s\\right) d s+\\int_{t_{0}}^{t} g\\left(X_{s}, s\\right) \\circ d W_{s}  \\quad (3)\n",
    "\\end{aligned}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "classical-authority",
   "metadata": {},
   "source": [
    "The difference of Ito integral (2) and Stratonovich integral (3) lies at the second integral term, which can be written in a general form as\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\int_{t_{0}}^{t} g\\left(X_{s}, s\\right) d W_{s} &=\\lim _{h \\rightarrow 0} \\sum_{k=0}^{m-1} g\\left(X_{\\tau_{k}}, \\tau_{k}\\right)\\left(W\\left(t_{k+1}\\right)-W\\left(t_{k}\\right)\\right) \\\\\n",
    "\\mathrm{where} \\quad h &= t_{k+1} - t_{k} \\\\\n",
    "\\tau_k &= (1-\\lambda)t_k +\\lambda t_{k+1} \n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "- In the stochastic integral of the Ito SDE, $\\lambda=0$, thus $\\tau_k=t_k$; \n",
    "\n",
    "- In the definition of the Stratonovich integral, $\\lambda=0.5$, thus $\\tau_k=(t_{k+1} + t_{k}) / 2$."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "japanese-chart",
   "metadata": {},
   "source": [
    "In BrainPy, these two different integrals can be easily implemented. What need the users do is to provide a keyword `sde_type` in decorator `bp.sdeint`. `sde_type` can be \"bp.STRA_SDE\" or \"bp.ITO_SDE\" (default). Also, the different type of Wiener process can also be easily distinguished by the `wiener_type` keyword. It can be \"bp.SCALAR_WIENER\"  (default) or \"bp.VECTOR_WIENER\"."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "legislative-geography",
   "metadata": {},
   "source": [
    "Now, let's numerically integrate the SDE (1) by the Ito way with the Milstein method:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "beginning-buying",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:30.677270Z",
     "start_time": "2021-03-24T11:08:30.664263Z"
    }
   },
   "outputs": [],
   "source": [
    "def g_part(x, t, p1, p2):\n",
    "    dg = g(x, t, p2)\n",
    "    return dg  # shape=(d,)\n",
    "\n",
    "@bp.sdeint(g=g_part, method='milstein')\n",
    "def f_part(x, t, p1, p2):\n",
    "    df = f(x, t, p1)\n",
    "    return df  # shape=(d,)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "minimal-asthma",
   "metadata": {},
   "source": [
    "Or, it can be expressed as:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "casual-architecture",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:30.708260Z",
     "start_time": "2021-03-24T11:08:30.680263Z"
    }
   },
   "outputs": [],
   "source": [
    "def g_part(x, t, p1, p2):\n",
    "    dg = g(x, t, p2)\n",
    "    return dg  # shape=(d,)\n",
    "\n",
    "def f_part(x, t, p1, p2):\n",
    "    df = f(x, t, p1)\n",
    "    return df  # shape=(d,)\n",
    "\n",
    "integral = bp.sdeint(f=f_part, g=g_part, method='milstein')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "willing-clear",
   "metadata": {},
   "source": [
    "However, if you try to numerically integrate the SDE with multi-dimensional Wiener process by the Stratonovich ways, you can code it like this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "ready-conspiracy",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:30.739259Z",
     "start_time": "2021-03-24T11:08:30.712276Z"
    }
   },
   "outputs": [],
   "source": [
    "def g_part(x, t, p1, p2):\n",
    "    dg = g(x, t, p2)\n",
    "    return dg  # shape=(d, m)\n",
    "\n",
    "def f_part(x, t, p1, p2):\n",
    "    df = f(x, t, p1)\n",
    "    return df  # shape=(d,)\n",
    "\n",
    "integral = bp.sdeint(f=f_part, g=g_part, method='milstein', \n",
    "                     sde_type=bp.STRA_SDE, \n",
    "                     wiener_type=bp.SCALAR_WIENER)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "challenging-rental",
   "metadata": {},
   "source": [
    "### Example 3: Noisy Lorenz system"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "stretch-heaven",
   "metadata": {},
   "source": [
    "Here, let's demenstrate how to define a numerical solver for SDEs with the famous [Lorenz system](https://en.wikipedia.org/wiki/Lorenz_system): \n",
    "\n",
    "$$\n",
    "\\begin{array}{l}\n",
    "\\frac{d x}{dt}&=\\sigma(y-x) &+ px*\\xi_x \\\\\n",
    "\\frac{d y}{dt}&=x(\\rho-z)-y &+ py*\\xi_y\\\\\n",
    "\\frac{d z}{dt}&=x y-\\beta z &+ pz*\\xi_z\n",
    "\\end{array}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "checked-greece",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:30.755264Z",
     "start_time": "2021-03-24T11:08:30.742270Z"
    }
   },
   "outputs": [],
   "source": [
    "sigma = 10\n",
    "beta = 8 / 3\n",
    "rho = 28\n",
    "p = 0.1\n",
    "\n",
    "def lorenz_g(x, y, z, t):\n",
    "    return p * x, p * y, p * z\n",
    "\n",
    "def lorenz_f(x, y, z, t):\n",
    "    dx = sigma * (y - x)\n",
    "    dy = x * (rho - z) - y\n",
    "    dz = x * y - beta * z\n",
    "    return dx, dy, dz\n",
    "\n",
    "lorenz = bp.sdeint(f=lorenz_f, g=lorenz_g, sde_type=bp.ITO_SDE, wiener_type=bp.SCALAR_WIENER, dt=0.005)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "thick-threat",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T11:08:39.075036Z",
     "start_time": "2021-03-24T11:08:38.687662Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'z')"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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JtwRZjQayc3NtbqVTDaG1tJtJ5WOFALX1NTQ09MzrJow3dDr9VZJaU9Pj9UUYzStfktLC5dddhlPPPEEy5Ytm/JzdIXlJyDMZjO7d+9mw4YNfPXVV6SkpLBmzRrOPvtsp7PYUu9zfHy8U6YGR4qhIfDQwQiiKFJVVYVGoyE9Pf2oEluCZPSYkZFhbXBxJIUFiynDJZdcwmOPPcZZZ501Lec3lNwTlJSOBy5yTyfMZjMHDx5k/fr1fPHFF8THx1t70keSZkq2wzNnzjxqhg+23WCSpZWbmxtz5sw56tbDgFW7npmZaXfDHCqFrampoa+vj3feeYeHHnqI8847b1rO76qrruL777+no6OD8PBwHnjgAVavXj0RSel44CL30YLUZy31pEdERLBq1SouuOACa71TumilrrejDVEUKSwsZGBgAJlMhtlstu51j5Z76kjEHgpRFNm+fTt///vfUalUZGRkcN99901ZdvwYgIvcxwJEUaS4uJj169ezdetWAgICmDdvHocOHeLtt98+JjqppHOUy+XWLL20121ra0Ov10/qBBRn4CyxwZJBv+SSS7jzzju55JJLKC0txcfH56gaVk4xjn1y33333Xz66acolUpmzJjB66+/bm3SeOSRR3j11VeRy+U8/fTTnHPOORM/62MEoijy+uuvc99995GUlIRCoWDlypWsXLlyynvSR4LUq+7h4THimGPbCSgajWZSVWaOIPWHO9NG2t/fz6WXXsott9zCVVddNenncoxiSi6USc2urFixgoKCAvLy8khJSeGRRx4BoKioiA8++IDCwkK2bdvGrbfeajes4HiFIAhUVVVx6NAhfvjhB1577TVMJhPXXXcd5513Hs899xyNjY1OjzE+UkjbBy8vr1HndikUCiIiIsjMzGTRokUEBgbS2NjI7t27KSkpQaVSjTrjbTwYD7HVajVXXnklN91005QTe9u2baSmppKcnMyjjz46pe91tDBlYfmmTZtYv3497777rpXkf/3rXwE455xzuP/++zn55JMnevhjGrY96Rs3bkSv11tdZuLj46dkdTSbzeTl5REYGEh8fPyEj2Gb1BrPqCNHGA+xBwYGuPLKK7niiiu46aabJnT+zsJkMpGSksJXX31FTEwMixYt4v333z+ann5TsnJPmQbztdde44orrgAsDRMnnXSS9bGYmBgaGxun6q2POgRBIDo6mttvv53f//73tLa2smnTJu644w56e3u54IILWLVq1aRNxZT816T5ahOFTCYjODiY4OBgu1FHFRUV45KTwmEPNmemoup0On7xi1+wZs0afvWrX034/J3F3r17SU5OJikpCYArr7ySzZs3HxOGnZOJcZP7rLPOoqWlZdjP//nPf7Jq1SrrvxUKBddccw2Aw7D0WCjLTAcEQSAiIoJbbrmFW265hY6ODj7++GPWrl1LR0cH5513HitXrpzwwHpJMBMZGUlUVNSknndAQAABAQF2tfTa2lqUSiXh4eGEhIQ47CbTaDTk5uY6ZUSh1+u57rrrOPfcc7nlllum5bpobGy0uwnGxMSwZ8+eKX/f6ca4yf3111+P+vibb77Jli1b+Oabb6xfVExMDPX19dbnNDQ0TOqFeDwhJCSEm266iZtuuomuri4++eQTHnroIerr66096UMHEYwEaQpIbGwsERERU3bOgiDg6+uLr68vM2bMsBpQ5OTk2M008/DwYGBgwGquOBaxDQYDN954I6eddhq33377tN3wfy6LzaTuubdt28add97JDz/8YGdzU1hYyNVXX83evXtpampi+fLllJeXHxM91scKent72bJlCxs3bqSiooLly5ezevVq5s2b55DokhIuISFhyl0+R4M000wyctDpdKSlpY15TkajkZtvvpk5c+Zw7733Tiu5du3axf33388XX3wBMCwndBRw7JfCkpOTrf3IACeddBIvvvgiYAnVX3vtNRQKBf/973+nTXF0PEKtVvP555+zfv16ioqKWLZsGatXr2bRokXI5XI0Go111PGxMNMMLAmxQ4cOERYWRl9fn7WWHh4ePsyxxWQyceutt5KYmMgDDzww7aum0WgkJSWFb775hujoaBYtWsR77703qaYP48SxT+7pwrp167j//vspLi5m7969LFy40PrYiVZP12q1fPnll6xbt45Dhw6xcOFC9u7dy0cffWRNCB1tSJNJZs2aZVXnDXVsCQ4OxsPDg4iICO68805CQkJ45JFHjprW/bPPPuMPf/gDJpOJG2+8kXvvvfeonMcgXOSWUFxcjEwm4ze/+Q2PP/64ldxFRUVcddVV1vD/rLPOoqys7IQJ/8vLyznvvPOYM2cO5eXlnHzyyaxatYpTTz31qDiUwmFij+YqK1kRv/DCC7z77ruEhITwxBNPcPrp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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "hist_times = np.arange(0, 50, lorenz.dt)\n",
    "hist_x, hist_y, hist_z = [], [], []\n",
    "x, y, z = 1., 1., 1.\n",
    "for t in hist_times:\n",
    "    x, y, z = lorenz(x, y, z, t)\n",
    "    hist_x.append(x)\n",
    "    hist_y.append(y)\n",
    "    hist_z.append(z)\n",
    "\n",
    "fig = plt.figure()\n",
    "ax = plt.axes(projection='3d')\n",
    "ax.plot3D(hist_x, hist_y, hist_z)\n",
    "ax.set_xlabel('x')\n",
    "ax.set_xlabel('y')\n",
    "ax.set_xlabel('z')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "industrial-specific",
   "metadata": {},
   "source": [
    "## Backend-independent Property"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "theoretical-beach",
   "metadata": {},
   "source": [
    "Actually, BrainPy provides general numerical solvers for user-defined differential equations. It is backend-independent. Users can define their differential equations with any computation backend they prefer, such as NumPy, PyTorch, TensorFlow, Jax. The only thing need to do is to provide the necessary operations to `brainpy.backend`. For the needed operations, you can inspect them by "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "loved-motion",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T12:27:00.911802Z",
     "start_time": "2021-03-24T12:27:00.865495Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['normal',\n",
       " 'exp',\n",
       " 'matmul',\n",
       " 'sum',\n",
       " 'as_tensor',\n",
       " 'zeros',\n",
       " 'ones',\n",
       " 'arange',\n",
       " 'eye',\n",
       " 'vstack',\n",
       " 'reshape',\n",
       " 'shape']"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bp.backend.NEEDED_OPS"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "divine-pakistan",
   "metadata": {},
   "source": [
    "After you define the necessary functions, you need to register them by `bp.backend.set_ops(**kwargs)`. Or, you can put all these functions into a \".py\" file, then import this python script as a module and set `bp.backend.set_ops_from_module(module)`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "local-development",
   "metadata": {},
   "source": [
    "Currently, BrainPy inherently supports NumPy, Numba, PyTorch, TensorFlow. You can easily switch backend just by typing `bp.backend.set()`. For example,"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "protecting-stations",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T12:36:39.156532Z",
     "start_time": "2021-03-24T12:36:39.140568Z"
    }
   },
   "outputs": [],
   "source": [
    "bp.backend.set('numpy')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "rolled-shopper",
   "metadata": {},
   "source": [
    "switch the backend to NumPy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "natural-treaty",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T12:36:40.646506Z",
     "start_time": "2021-03-24T12:36:40.528169Z"
    }
   },
   "outputs": [],
   "source": [
    "bp.backend.set('numba')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "choice-circulation",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T12:36:42.284988Z",
     "start_time": "2021-03-24T12:36:42.258984Z"
    }
   },
   "source": [
    "switch the backend to Numba."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "sustained-builder",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-03-24T12:36:51.150318Z",
     "start_time": "2021-03-24T12:36:49.517904Z"
    }
   },
   "outputs": [],
   "source": [
    "bp.backend.set('pytorch')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "advisory-upper",
   "metadata": {},
   "source": [
    "switch the backend to pytorch."
   ]
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.9"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {
    "height": "265px",
    "width": "436px"
   },
   "number_sections": false,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
